// 存储请求开始时间的Map
let requestStartTimeMap = new Map();

// 存储API数据的数组
let apiData = [];

// 监控状态
let isMonitoring = true;

// 最大记录数
const MAX_RECORDS = 100;

// 超时阈值（毫秒）
const TIMEOUT_THRESHOLD = 3000;

// 初始化：从存储中加载数据
chrome.storage.local.get(['apiData', 'isMonitoring'], (result) => {
  if (result.apiData) {
    apiData = result.apiData;
  }
  
  if (result.isMonitoring !== undefined) {
    isMonitoring = result.isMonitoring;
  }
});

// 监听请求发送前事件
chrome.webRequest.onBeforeRequest.addListener(
  (details) => {
    if (isMonitoring && details.type === 'xmlhttprequest') {
      // 记录请求开始时间
      requestStartTimeMap.set(details.requestId, Date.now());
    }
  },
  { urls: ["<all_urls>"] }
);

// 监听请求完成事件
chrome.webRequest.onCompleted.addListener(
  (details) => {
    if (isMonitoring && details.type === 'xmlhttprequest') {
      const startTime = requestStartTimeMap.get(details.requestId);
      
      if (startTime) {
        // 计算响应时间
        const endTime = Date.now();
        const duration = endTime - startTime;
        
        // 创建API数据对象
        const apiInfo = {
          url: details.url,
          duration: duration,
          status: details.statusCode,
          timestamp: endTime
        };
        
        // 添加到数据数组
        addApiData(apiInfo);
        
        // 从Map中删除已处理的请求
        requestStartTimeMap.delete(details.requestId);
      }
    }
  },
  { urls: ["<all_urls>"] }
);

// 监听请求错误事件
chrome.webRequest.onErrorOccurred.addListener(
  (details) => {
    if (isMonitoring && details.type === 'xmlhttprequest') {
      const startTime = requestStartTimeMap.get(details.requestId);
      
      if (startTime) {
        // 计算响应时间
        const endTime = Date.now();
        const duration = endTime - startTime;
        
        // 创建API数据对象
        const apiInfo = {
          url: details.url,
          duration: duration,
          status: 'error',
          timestamp: endTime
        };
        
        // 添加到数据数组
        addApiData(apiInfo);
        
        // 从Map中删除已处理的请求
        requestStartTimeMap.delete(details.requestId);
      }
    }
  },
  { urls: ["<all_urls>"] }
);

// 添加API数据
function addApiData(data) {
  // 添加到数组开头（最新的在前面）
  apiData.unshift(data);
  
  // 限制最大记录数
  if (apiData.length > MAX_RECORDS) {
    apiData = apiData.slice(0, MAX_RECORDS);
  }
  
  // 保存数据
  chrome.storage.local.set({ apiData });
  
  // 向popup发送消息
  chrome.runtime.sendMessage({
    type: 'API_RESPONSE',
    data: data
  });
}

// 监听来自popup.js的消息
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  // 切换监控状态
  if (message.type === 'TOGGLE_MONITORING') {
    isMonitoring = message.isMonitoring;
  }
  
  // 清空数据
  if (message.type === 'CLEAR_DATA') {
    apiData = [];
    chrome.storage.local.set({ apiData });
  }
});